#ifndef _WEB_PAGE_QUERY_H
#define _WEB_PAGE_QUERY_H

#include "SplitTool.h"
#include "WebPages.h"
#include "json.hpp"
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>

using std::string;
using std::unordered_map;
using std::vector;

class WebPageQuery {
  public:
    WebPageQuery(const string &, SplitTool *); // 构造函数
    string doQuery();                          // 执行查询，返回结果

  private:
    void loadLibrary();                                                                  // 加载库文件
    vector<double> getQueryWordsWeightVector(vector<string> &);                          // 计算查询词的权重值
    bool executeQuery(const vector<string> &, vector<std::pair<int, vector<double>>> &); // 执行查询

    string createJson(vector<std::pair<int, double>> &);
    string returnNoAnswer();

  private:
    string _queryWord;
    SplitTool *_jieba;                                                    // Jieba 分词库对象
    unordered_map<int, WebPage> _pageLib;                                 // 网页库
    unordered_map<int, std::pair<int, int>> _offsetLib;                   // 偏移库
    unordered_map<string, set<std::pair<int, double>>> _invertIndexTable; // 倒排索引表
};
#endif